package gui;

import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.JLabel;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import javax.swing.ListSelectionModel;

import negocio.Alumno;
import negocio.AlumnoControlador;
import negocio.Cursada;
import negocio.CursadaControlador;
import negocio.Examen;
import negocio.ExamenControlador;
import negocio.NotaExamen;
import negocio.NotaExamenControlador;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;
import java.awt.Color;
import javax.swing.SwingConstants;

public class ReportarNotas extends JFrame {

	private JPanel contentPane;
	private JTable table;
	private JScrollPane scrollPane;
	private JButton btnNewButton;
	private JButton btnGuardarNotas;
	private Cursada cursadaSeleccionada;
	private JComboBox comboBox;
	ArrayList<Alumno> alumnos;
	DefaultTableModel model;
	private ArrayList<Examen> examenes= new ArrayList<Examen>();
	private JLabel lblNewLabel;

	public void llenarCombo()
	{
		comboBox.removeAll();
		examenes=ExamenControlador.getExamenes(this.cursadaSeleccionada);
		for(Examen e : examenes)
		{
			comboBox.addItem(e);
		}
		comboBox.setSelectedIndex(-1);
	}
	
	public void llenarTabla()
	{
		alumnos = AlumnoControlador.getAlumno(cursadaSeleccionada);
		model = new DefaultTableModel();
		model.setRowCount(0);
		comboBox.getSelectedItem().toString();
		
		ArrayList<String> encabezado = new ArrayList<String>();
		encabezado.add("Nombre alumno");
		encabezado.add("DNI Alumno");
		encabezado.add("Nota");
		
		model.setColumnIdentifiers(encabezado.toArray());
		
		table.setModel(model);
		ArrayList<String>fila=new ArrayList<String>();
		ArrayList<Examen> examenes=ExamenControlador.getExamenes(cursadaSeleccionada);
		ArrayList<NotaExamen> notas;
		
		for(Alumno a: alumnos)
		{
			fila.add(a.getApellido() + ", "+a.getNombre());
			fila.add(a.getDni());
			notas=NotaExamenControlador.getNotasExamen((Examen)comboBox.getSelectedItem());
			for(NotaExamen n:notas)
			{
				if(a.getDni().equals(n.getAlumno().getDni()))
				{
					fila.add(Double.toString(n.getNota()));
				}
			}
			
			model.addRow(fila.toArray());
			fila.removeAll(fila);
		}
		table.setModel(model);
	}
	
	public void guardar()
	{
		
		for(int i=0; i<model.getRowCount(); i++)
		{
			NotaExamen nota =new NotaExamen((Examen) comboBox.getSelectedItem(), alumnos.get(i), 
					Double.parseDouble((String) table.getValueAt(i, 2)));
			NotaExamenControlador.guardar(nota);
		}
	}
	
	public ReportarNotas(NotasYExamenes padreNotasYExamenes, Cursada cursadaSeleccionada) {
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e){
				padreNotasYExamenes.nullReportarNotas();
			}
		});		
		this.cursadaSeleccionada=cursadaSeleccionada;
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 311, 505);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		this.setTitle("Reportar notas");
		
		
		JLabel lblCurso = new JLabel("Curso: "+cursadaSeleccionada.getCurso().getNombre());
		lblCurso.setBounds(10, 11, 274, 14);
		contentPane.add(lblCurso);
		
		JLabel lblCodigoCursada = new JLabel("Comision: "+cursadaSeleccionada.getCodigo());
		lblCodigoCursada.setBounds(10, 36, 274, 14);
		contentPane.add(lblCodigoCursada);
		
		JLabel lblInstanciaDeEvaluacin = new JLabel("Instancia de evaluacion");
		lblInstanciaDeEvaluacin.setBounds(10, 61, 125, 14);
		contentPane.add(lblInstanciaDeEvaluacin);
		comboBox = new JComboBox<Examen>();
		comboBox.setSelectedItem(0);
		
		comboBox.setBounds(145, 58, 139, 20);
		contentPane.add(comboBox);
		this.llenarCombo();
		
		scrollPane = new JScrollPane();
		scrollPane.setBounds(10, 104, 274, 293);
		contentPane.add(scrollPane);
		
		table = new JTable(){
			@Override
			public boolean isCellEditable(int row, int colum)
			{
				if(colum<2)
					return false;
				else return true;
			}
		};
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scrollPane.setViewportView(table);

		comboBox.addActionListener (new ActionListener () {
		    public void actionPerformed(ActionEvent e) {
		        llenarTabla();
		    }
		});
		
		
		
		btnNewButton = new JButton("Cancelar");
		btnNewButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				padreNotasYExamenes.nullReportarNotas();
				dispose();
				
			}
		});
		
		btnNewButton.setBounds(184, 433, 101, 23);
		contentPane.add(btnNewButton);
		
		btnGuardarNotas = new JButton("Guardar notas");
		btnGuardarNotas.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				Validador validador= new Validador();
				boolean notasOk=true;
				for(int i=0; i<model.getRowCount(); i++)
				{
					if(table.getValueAt(i, 2)!=null)
					{
						//System.out.println("nota valida: "+validador.validarNota((String) table.getValueAt(i, 2)));
						if(!validador.validarNota((String) table.getValueAt(i, 2))||table.getValueAt(i, 2)==null)
						{
							
							notasOk=false;
						}
					}
				}
				
				if(notasOk)
				{
					if(comboBox.getSelectedIndex()!=-1)
					{
						guardar();
						padreNotasYExamenes.llenarTabla();
						if(comboBox.getSelectedIndex()==0)
							CursadaControlador.setEstado(cursadaSeleccionada, "Finalizada");
						dispose();		
					}
					else
					{
						lblNewLabel.setText("Seleccione una cursada");
						lblNewLabel.setVisible(true);
					}
				}
				else
				{
					lblNewLabel.setText("Verifique formato de notas.");
					lblNewLabel.setVisible(true);
				}
			}
		});
		btnGuardarNotas.setBounds(73, 433, 101, 23);
		contentPane.add(btnGuardarNotas);
		
		lblNewLabel = new JLabel("");
		lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
		lblNewLabel.setForeground(Color.RED);
		lblNewLabel.setBounds(10, 408, 274, 14);
		contentPane.add(lblNewLabel);
	}

}
